<?php

namespace app\common\model;

use app\common\lib\ZhyxMongo;

class FollowDeliverReport extends BaseModel
{
    protected $name = 'follow_deliver_report';

    /**
     * 获取列表
     * @param array $where 查询条件
     * @param string $field 字段
     */
    public function getLists(array $where=[], string $field="*")
    {
        return  $this->where($where)->field($field)->order('created_at', 'desc')->paginate($this->pageLimit = 10);
    }

    /**
     * 条件获取数据
     * @param array $where 查询条件
     * @param string $field 字段
     * @param string $order 排序字段
     * @param string $sort 排序方式
     */
    public function getOneData(array $where=[], string $field="*", string $order, string $sort="desc")
    {
        return  $this->where($where)->field($field)->order($order, $sort)->find();
    }

    /**
     * 添加数据
     * @param array $param 参数
     * @return string
     */
    public function addData(array $param=[]): string
    {
        //添加时销毁自带的主键id
        unset($param['id']);
        return  $this->save($param);
    }

    /**
     * 更新数据
     * @param string $id 主键
     * @param array $param 参数
     * @return bool
     */
    public function saveData(string $id, array $param=[]): bool
    {
        $model = self::find($id);
        return  $model->save($param);
    }

    /**
     * 删除数据
     * @param string $id
     * @return bool
     */
    public function delData(string $id): bool
    {
        return  self::destroy($id);
    }

    /**
     * 获取条件匹配的数据
     * @param array $where 条件
     * @param string $field 字段
     * @return array
     */
    public function getConditionData(array $where=[], string $field="*"): array
    {
        return  $this->field($field)->where($where)->select()->toArray();
    }

    /**
     * mongodb聚合查询
     * @param array $pip 条件
     * @return array
     */
    public function mongoAggregate(array $pip=[]): array
    {
        $data = ZhyxMongo::getInstance()->setCollection($this->name)->aggregate($pip);
        $ret = [];
        foreach ($data as $k => $v) {
            $ret[] = iterator_to_array($v);
        }
        return $ret;
    }

    /**
     * 条件计数
     * @param array $where 查询条件
     * @param array $where2 查询条件2
     * @return int
     */
    public function getDataCount(array $where=[], array $where2=[]): int
    {
        return  $this->where($where)->where($where2)->count();
    }
}